package com.xyh.concurrency.example.commonUnsafe;

import lombok.extern.slf4j.Slf4j;

import java.util.Iterator;
import java.util.Vector;

/**
 * 在便利数组集合的时候 尽量不要去进行增加删除修改的操作这样会造成异常
 * 使用 迭代器和 fore 循环就会出现
 * 但是普通就不会出现这种情况
 * <p>
 * java.util.ConcurrentModificationException
 */
@Slf4j
public class ArreyListErrorExamlpe {
    //java.util.ConcurrentModificationException
    public static void test1(Vector<Integer> vectors) {
        for (Integer vector : vectors) {
            if (vector.equals(3)) {
                vectors.remove(vector);
            }
        }
    }

    //java.util.ConcurrentModificationException
    public static void test2(Vector<Integer> vectors) {
        Iterator<Integer> iterator = vectors.iterator();
        while (iterator.hasNext()) {
            Integer next = iterator.next();
            if (next.equals(3)) {
                vectors.remove(next);
            }
        }
    }

    public static void test3(Vector<Integer> vectors) {
        for (int i = 0; i < vectors.size(); i++) {
            if (vectors.get(i).equals(3)) {
                vectors.remove(vectors.get(i));
            }
        }
    }

    public static void main(String[] args) {
        Vector<Integer> vector = new Vector();
        vector.add(1);
        vector.add(2);
        vector.add(3);
        test1(vector);
    }
}
